package com.thermal.thermal_inspection.mapper;

import com.thermal.thermal_inspection.entity.InspectionData;
import com.thermal.thermal_inspection.entity.InspectionDetail;
import com.thermal.thermal_inspection.vo.NewDetailVO;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
import java.util.List;
import java.util.Set;

@Repository
@Mapper
public interface InspectionDetailMapper {
    /**
     * 插入inspection_detail表
     */
    int addInspectionDetail(int inspectionWorkId, int inspectionDataId, int inspectionDetailClass,
                            int inspectionDetailUser, int inspectionDetailStatus,int inspectionGroupId,int mapDetailId,String inspectionDataDesc,String inspectionDataName,int unitId);

    /**
     * 获取所有userId
     */
    List<Integer> getAllUserId();

    /**
     * 通过userId获取inspectionWorkId
     */
    List<Integer> getInspectionWorkIdByUserId(int userId);

    /**
     * 通过workId和user获取inspectionDetail列表
     */
    List<InspectionDetail> getDetailByWorkIdAndUser(int inspectionWorkId, int userId);

    /**
     * 通过workId获取inspectionDetail列表
     */
    List<InspectionDetail> getDetailByWorkId(int inspectionWorkId);

    /**
     * 删除分配巡检任务
     */
    int deleteInspectionWork(int inspectionWorkId);

    /**
     * 通过用户id获取InspectionDetail列表
     */
    List<InspectionDetail> getDetailByUserId(int userId);

    /**
     * 获取某用户inspectionDetailStatus为0的分配任务数量
     */
    int getInspectionNum(int userId);

    /**
     * 获取某用户inspectionDetailStatus为4的分配任务数量
     */
    int getExceptionNum(int userId);

    /**
     * 获取某用户inspectionDetailStatus为2的分配任务数量
     */
    int getMissNum(int userId);

    /**
     * 获取某用户inspection_detail_ischeat为1的分配任务数量
     */
    int getCheatNum(int userId);


    /**
     * 设置图片保存路径
     */
    int setImage(int inspectionDetailId, String imagesFolder);

    /**
     * 设置作弊信息保存路径
     */
    int setCheatMsg(int inspectionDetailId, String cheatMsgFolder);

    /**
     * 设置巡检点位状态
     */
    int setStatus(int inspectionDetailId, int inspectionDetailStatus);

    /**
     * 通过inspectionDetailId获得inspectionWorkId
     */
    Integer getInspectionWorkIdByDetailId(int inspectionDetailId);

    /**
     * 获得图片保存路径
     */
    String getImg(int inspectionDetailId);

    /**
     * 获取巡检点位状态
     */
    int getStatus(int inspectionDetailId);

    /**
     * 设置点位是否作弊
     */
    int setIsCheat(int isCheat, int inspectionDetailId);

    /**
     * 获取点位数据字符串
     */
    String getValueStr(int inspectionDetailId);

    /**
     * 获取某用户巡检点位数量
     */
    int getUserInspectionWorkNumber(int userId, int inspectionWorkId);

    /**
     * 获取某用户巡检点位完成数量
     */
    int getUserInspectionWorkFinish(int userId, int inspectionWorkId);

    /**
     * 通过id获取录音路径
     */
    String getCheatMsg(int inspectionDetailId);

    /**
     * 设置巡检点位任务完成时间
     */
    void setEndTime(int inspectionDetailId, Timestamp now);

    /**
     * 获取所有用户inspectionDetailStatus为0的分配任务数量
     */
    int getAllInspectionNum();

    /**
     * 获取所有用户inspectionDetailStatus为4的分配任务数量
     */
    int getAllExceptionNum();

    /**
     * 获取所有用户inspectionDetailStatus为1的分配任务数量
     */
    int getAllMissNum();

    /**
     * 获取所有用户inspection_detail_ischeat为1的分配任务数量
     */
    int getAllCheatNum();

    /**
     * 获取用户任务详情数量
     */
    int getInspectionWorkUserNumber(int inspectionWorkId, int userId);

    /**
     * 获取某用户某状态的任务数量
     */
    int getUserStatusNum(int userId, int status);

    /**
     * 根据inspectionGroupId来查询任务
     */
    InspectionDetail getInspectionDetailByGroupId(int inspectionGroupId);
    /**
     * 根据inspectionDetailId修改inspectionDetail
     */
    Integer updateInspectionDetail(NewDetailVO newDetailVO);
    /**
     * 根据InspectionDetailId删除巡检点位任务
     */
    Integer deleteInspectionDetail(int inspectionDetailId);
    /**
     * 根据inspectionDetailId来查询inspectionDetail
     */
    InspectionDetail getInspectionDetailById(int inspectionDetailId);

    /**
     * 查找所有班组
     */
    List<Integer> getClassList();

    /**
     * 返回一个包含 (unitId, classId) 的 Set<Pair<Integer, Integer>>
     */
    Set<ImmutablePair<Integer, Integer>> getAllUnitClassPairs();
    /**
     * 根据inspectionDataId和inspectionWorkId修改inspectionDetail
     */
    Integer updateInspectionDetailByDataIdAndWorkId(InspectionDetail inspectionDetail);

    /**
     * 根据查询用户和地图来查询
     */
    List<InspectionDetail> getDetailByUserAndMap(int searchUserId, int mapId);

    /**
     * 判断用户是否正在执行任务
     */
    List<InspectionDetail> userInWork(int userId);
    /**
     * 根据userId和status=0来查询用户正在处理中的任务
     */
    List<InspectionDetail> getInspectionDetailByUserIdAndStatus(int userId,int status);
}
